home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / lib / C / ppreserve.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  1.3 KB  |  69 lines

  1. /*
  2.  * ppreserve.c --
  3.  *    Routines to preserve palloc'd memory in LISP.
  4.  */
  5.  
  6. #include "tmp/postgres.h"
  7. #include "nodes/pg_lisp.h"
  8.  
  9. RcsId("$Header: /private/postgres/src/lib/C/RCS/ppreserve.c,v 1.5 1990/09/25 16:23:06 kemnitz Exp $");
  10.  
  11. /*
  12.  *    ppreserve    - preserve palloc'd memory in LISP
  13.  *
  14.  *    Returns a vectori-byte containing a copy of palloc-formatted
  15.  *    memory.  "Prestore" should be called before trying to use it.
  16.  */
  17. LispValue
  18. ppreserve(pallocObject)
  19.     char    *pallocObject;
  20. {
  21.     LispValue    vectori;
  22.     int        length;
  23.  
  24.     length = PSIZEALL(pallocObject);
  25.     LISP_GC_OFF;
  26.     vectori = lispVectori(length);
  27.     LISP_GC_PROTECT(vectori);
  28.     LISP_GC_ON;
  29.     bcopy(PSIZEFIND(pallocObject),
  30.           (char *) LISPVALUE_BYTEVECTOR(vectori),
  31.           length);
  32.     return(vectori);
  33. }
  34.  
  35. LispValue
  36. lppreserve(pallocObject)
  37.     LispValue    pallocObject;
  38. {
  39.     return(ppreserve((char *) LISPVALUE_INTEGER(pallocObject)));
  40. }
  41.  
  42.  
  43. /*
  44.  *    prestore    - restore saved palloc'd memory
  45.  *
  46.  *    Returns a pointer to the data in a ppreserve'd object.
  47.  *    See "ppreserve" above.
  48.  */
  49. char *
  50. prestore(ppreservedObject)
  51.     char    *ppreservedObject;
  52. {
  53.     return(PSIZESKIP(ppreservedObject));
  54. }
  55.  
  56. LispValue
  57. lprestore(ppreservedObject)
  58.     LispValue    ppreservedObject;
  59. {
  60.     LispValue    newPointer;
  61.  
  62.     LISP_GC_OFF;
  63.     newPointer = lispInteger((int)
  64.                  prestore(LISPVALUE_BYTEVECTOR(ppreservedObject)));
  65.     LISP_GC_PROTECT(newPointer);
  66.     LISP_GC_ON;
  67.     return(newPointer);
  68. }
  69.